// var getCurEnv = require('./getCurEnv')

// 判断是否为 NODE运行环境
if('NODE' === getCurEnv()) {
	module.exports = {
		element,
		getRegData,
		getRegModifiers,
		getRegPattern,
	}
}




/**
 * [element description]
 * @param  {[type]} tag     [description]
 * @param  {[type]} htmlStr [description]
 * @return {[type]}         [description]
 */
function element(tag, htmlStr) {
	var html = htmlStr || document.body.innerHTML;
	// ? 防止贪婪匹配
	var reg = new RegExp('<('+tag+')>.+?<\/\\1>', 'g')
	console.log(reg)
	return html.match(reg)
}


/**
 * 获取正则表达式 pattern, modifiers 两部分的内容
 * @param  {[type]} reg [description]
 * @return {[type]}     [description]
 */
function getRegData(reg) {
	if (!reg instanceof RegExp) {
		throw new TypeError('first argument must be an regExp object')
	}

	var regStr = reg.toString()
	var pos = regStr.lastIndexOf('/')

	var modifiers = regStr.substr(pos + 1)

	// 两种计算 pattern的方法
	var pattern = reg.source
	// var pattern = regStr.substring(1, pos)

	return {
		pattern,
		modifiers
	}
}

/**
 * 获取正则表达式的修饰符 modifiers
 * @param  {[type]} reg [description]
 * @return {[type]}     [description]
 */
function getRegModifiers(reg) {
	return getRegData(reg)['modifiers']
}


/**
 * 获取正则表达式的模式 pattern
 * @param  {[type]} reg [description]
 * @return {[type]}     [description]
 */
function getRegPattern(reg) {
	return reg.source
}



/**
 * 返回详细的匹配信息
 * @param  {[type]} reg       [description]
 * @param  {[type]} str       [description]
 * @param  {Number} lastIndex [description]
 * @return {[type]}           [description]
 */
function matchAll(reg, str, lastIndex = 0) {
	reg.lastIndex = lastIndex
	
	// 没有匹配全局模式
	if(!reg.global) {
		return reg.exec(str)
	}

	var m, matches = []
	while(m = reg.exec(str)) {
		matches.push(m)
	}
	return matches
}

/**
 * 判断当前环境
 * @return {[type]} [description]
 */
function getCurEnv() {
   return  typeof window === 'object' && this === window ? 'BROWSER' : 'NODE';
}

